#include <iostream>
#include <sstream>
#include "Servicio.h"
#include "ProtocoloConstantes.h"

using namespace std;
using namespace TP::Servicios;
using namespace TP::Comunicacion;

void Servicio::hidratarMensaje (const string& pDescriptor, vector<string>& pMensaje) throw (Excepcion&) {
        
    // Hidrato el comando.

    std::stringstream ssParametros (pDescriptor);
    string strParametro = "";
    pMensaje.clear();
    while (std::getline(ssParametros, strParametro, SEPARADOR_CAMPO))
        if (strParametro != "" )
            pMensaje.push_back(strParametro);

    if (pMensaje.size() == 0)
        // Comando no definido.
        throw Excepcion ("Formmato de mensaje invalido: " + pDescriptor);
}

void Servicio::notificar (IMensajero* pMensajero, const string& pMensaje){

    try
    {
        string respuesta = OK;
        respuesta += SEPARADOR_CAMPO;
        respuesta += pMensaje;
        respuesta += SEPARADOR_CAMPO;
        
        cout << respuesta << endl;
        
        pMensajero->Responder(respuesta);
    }
    catch (Excepcion& pEx)
    {
        cerr <<pEx.what() << endl;
    }
}

void Servicio::notificarError (IMensajero* pMensajero, const string& pMensaje){
    try
    {
        string respuesta = ERROR;
        respuesta += SEPARADOR_CAMPO;
        respuesta += pMensaje;
        respuesta += SEPARADOR_CAMPO;
        
        pMensajero->Responder(respuesta);
    }
    catch (Excepcion& pEx)
    {
        cerr <<pEx.what() << endl;
    }

}
